from flask_sqlalchemy import SQLAlchemy
from datetime import datetime as datetimes
import datetime, time


sql = SQLAlchemy()


class User(sql.Model):
    """用户"""
    __tablename__ = "user"

    id = sql.Column(sql.Integer, primary_key=True)  # 用户编号
    nick_name = sql.Column(sql.String(32), unique=True, nullable=False)  # 用户昵称
    password_hash = sql.Column(sql.String(128), nullable=False)  # 加密的密码
    email = sql.Column(sql.String(128), unique=True, nullable=False)  # 邮箱
    avatar_url = sql.Column(sql.String(256))  # 用户头像路径
    last_login = sql.Column(sql.DateTime, default=datetimes.now)  # 最后一次登录时间
    create_time = sql.Column(sql.DateTime, default=datetimes.now())  # 创建账号时间
    is_admin = sql.Column(sql.Boolean, default=False)   # 是否是管理员
    signature = sql.Column(sql.String(512))  # 用户签名
    is_vip = sql.Column(sql.Integer, default=0)   # 是否是vip， 默认是0， 0则不是
    gender = sql.Column(  # 性别
        sql.Enum(
            "MAN",  # 男
            "WOMAN"  # 女
        ),
        default="MAN"
    )
    activate = sql.Column(sql.String(256))   # 用户是否已经通过邮箱激活了， 0表示已经激活了， 如果没有激活， 则不能发帖， 也不能回帖
    forget = sql.Column(sql.String(256), default=0)      # 用户可以重新设置密码

    award = sql.Column(sql.Integer, default=0)  # 用户的飞吻数
    continuous_sign_in = sql.Column(sql.Integer, default=0)  # 用户连续签到的天数
    sign_in_time = sql.Column(sql.Integer, default=0)  # 用户连续签到的天数


# 昨天时间
today = datetime.date.today()
yesterday = today - datetime.timedelta(days=1)
# 昨天开始时间戳
yesterday_start_time = int(time.mktime(time.strptime(str(yesterday), '%Y-%m-%d')))


def run():
    while 1:
        user_all = sql.session.query(User).filter(User.sign_in_time != 0).all()
        for i in user_all:
            if i.sign_in_time < yesterday_start_time:
                i.sign_in_time = 0
                i.continuous_sign_in = 0
                sql.session.commit()
        time.sleep(86400)
